from lxml import etree

# re =etree.HTMLParser()
# html=etree.parse('../././././2xpath.html',etree.HTMLParser())//不能使用这种方法
# 只能使用绝对路径
html = etree.parse('D:/djangoEnv/djangoEnv/spider/./2xpath.html', etree.HTMLParser())

#使用text()方法获取a标签的标签内容
r = html.xpath('/html/body/ul/li/a/text()')
# print(r)
#['java工程师', 'python工程师', 'ai工程师']

#使用子节点也可以定位,-这是查找所有li标签中的a内容
r=html.xpath('//li/a/text()')
# print(r)
#['java工程师', 'python工程师', 'ai工程师', '1', '2', '3']

#使用子节点定位第二个ul标签，再定位里面的li/a/text
#如果在ul前面还有一个div标签，使用ul[2]找不到
# r=html.xpath('//ul[2]/li/a/text()') #前面加div.tt，这句错误
# print(r)

#使用class属性查询内容
r=html.xpath('//ul[@class="menu"]/li/a/text()')
print(r)
#['java工程师', 'python工程师', 'ai工程师']

#使用class属性查询下下一级子节点中的内容使用//
txt=html.xpath('//div[@class="tt"]//li/a/text()')
print(txt)
#['1', '2', '3']

#使用a标签的href属性获取a中的地址
hf=html.xpath('//div[@class="tt"]//li/a/@href')
print(hf)
#['hf1', 'hf2', 'hf3']

#使用方法zip函数把a标签的地址与标签内容组成键值对
print(*zip(txt,hf))
#('1', 'hf1') ('2', 'hf2') ('3', 'hf3')

#使用list方法把zip方法得到的数值对转变成数组
res=list(zip(txt,hf))
print(res)
#[('1', 'hf1'), ('2', 'hf2'), ('3', 'hf3')]


"""

/当前元素的直接子节点
//当前元素的子节点或孙子节点

text()获取文本
@attr 获取属性对应的值

"""

